<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>QeePHP 快速入门</title>
<link href="css/base.css" rel="stylesheet" type="text/css">
</head>
<body>

<div id="page">


<div class="guide-section">

  <div class="guide-header">
    <span class="nav">
      <a href="http://qee13.com/app/?action=docs">文档索引</a>
      &raquo;
      <a href="index.html">QeePHP 快速入门</a>
      &raquo;
      <a href="node-start.html">起步</a>
      &raquo;
      MVC 模式的启动    </span>
  </div>

  <div class="guide-section-details formatted">
    
<h1>MVC 模式的启动</h1>

<p>在 QeePHP 应用中，启动 MVC
模式需要经过一系列的操作，了解这个过程可以帮助我们更好的使用
QeePHP。</p>

<p>QeePHP 启动 MVC 模式的主要步骤：</p>

<div class="figure"><img src="images/start-mvc-startup-01.png" alt="" />
	<p>QeePHP 启动 MVC 模式的主要步骤</p>
</div>

<p>下面根据上图依次说明各个步骤载入的文件，以及文件的用途和主要功能。</p>

<h2>入口文件</h2>

<p>首先，所有的请求都会发送到一个特殊的 PHP
脚本文件。这个文件被称为“入口”。新建好的应用程序在
app 目录或根目录中有一个名为 index.php
的文件，这个文件就是“入口”。</p>

<p>“入口”的代码很少：</p>

<pre class="php code"><span class="co1">//载入QeePHP</span>
<span
class="kw1">require</span> _INDEX_DIR_<span class="sy0">.</span><span
class="st_h">'/../library/q.php'</span><span class="sy0">;</span>
&nbsp;
<span
class="co1">//载入应用对象</span>
<span
class="kw1">require</span> _INDEX_DIR_<span class="sy0">.</span><span
class="st_h">'/_code/myapp.php'</span><span class="sy0">;</span>
&nbsp;
<span
class="co1">//进入 MVC</span>
<span class="re0">$ret</span> <span
class="sy0">=</span> MyApp<span class="sy0">::</span><span
class="me2">instance</span><span class="br0">&#40;</span>_INDEX_DIR_<span
class="sy0">.</span><span class="st_h">'/_code/_config'</span><span
class="br0">&#41;</span><span class="sy0">-&gt;</span><span
class="me1">dispatching</span><span class="br0">&#40;</span><span
class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
<span
class="kw1">if</span> <span class="br0">&#40;</span><span
class="kw3">is_string</span><span class="br0">&#40;</span><span
class="re0">$ret</span><span class="br0">&#41;</span><span
class="br0">&#41;</span> <span class="kw3">echo</span> <span
class="re0">$ret</span><span class="sy0">;</span></pre>

<p>这个文件要做的事情就和代码中的注释一样，非常简单。</p>

<h2>应用程序对象</h2>

<p>在前面的 index.php 入口文件中，通过 MyApp::instance()
这样的调用构造了一个 MyApp
类的对象实例。这个对象就是应用程序对象，定义在
app/myapp.php 文件中。</p>

<p>应用程序对象封装了整个应用程序需要的一些公共服务，例如检查当前访问用户的身份、检查访问权限等等。</p>

<p>主要功能：</p>

<ul>
	<li>初始化应用程序运行环境</li>

	<li>载入配置文件</li>

	<li>设置异常处理函数</li>

	<li>根据设置启动 session</li>

	<li>解析请求，决定要调用的控制器</li>
</ul>

<p>应用程序对象提供的基础服务：</p>

<ul>
	<li>取得当前访问用户的信息（需要启动 session）</li>

	<li>将指定的用户信息保存到 session</li>

	<li>从 session 清除用户信息</li>

	<li>获得应用程序的设置</li>

	<li>处理控制器或动作无法找到的异常情况</li>

	<li>处理用户没有权限访问控制器的异常情况</li>
</ul>

<blockquote>
	<p>在大部分 PHP
	框架中，上述服务都被放到了框架中，但这是一种相当错误的做法。</p>

	<p>虽然应用程序对象的功能几乎每一个应用都需要，但是许多应用在具体要求上都有区别。如果这些功能被放在框架中，框架设计者不得不留出接口来让开发者处理额外的情况，这不但会导致框架变得复杂臃肿，还增加了开发者的定制难度。而
	QeePHP
	将应用程序对象完全开放给开发者，让开发者可以按照自己的需求
	100%
	的定制。这种做法既避免了框架变得复杂，又降低了开发者的定制难度。</p>
</blockquote>

<p>应用程序对象构造后，调用了该对象的 dispatching()
方法。这个方法内容按照如下的流程真正启动 MVC 模式：</p>

<div class="figure"><img src="images/start-mvc-startup-02.png" alt="" />
	<p>应用程序对象如何解析请求，并调用控制器</p>
</div>

<p>我们一般不需要修改里面的流程，当控制器被调用时，MVC
模式就完成了启动工作，接下来就是控制器和视图的交互，以及将操作结果返回给浏览器。</p>
$Id: start-mvc-startup.texy 2013-08-14 02:24:25Z Tim13 $
  </div>

  <div class="guide-footer">

    <table border="0" width="100%">
      <tr>
        <td align="left" width="200">
                    &laquo;
          <a href="node-start-mvc.html">MVC 模式</a>
          
        </td>

        <td align="center">
          本章：<a href="node-start.html">起步</a>
          <br />
          <a href="index.html">返回索引页</a>
        </td>

        <td align="right" width="200">
                    <a href="node-start-mvc-controller.html">控制器</a> 
          &raquo;
                  </td>
      </tr>
    </table>

  </div>

</div>


</div>

</body>
</html>


